Servo Memory Controller con potenciómetro
📄 Descargar PDF del proyectoEn este proyecto vas a controlar un servo con un potenciómetro, pero con un extra muy especial: podrás guardar varias posiciones usando un botón y luego reproducirlas automáticamente con otro. Es como crear una pequeña animación mecánica programable, perfecta para aprender a usar servos, botones, EEPROM y lógica con Arduino.
Material necesario
- Arduino UNO
- Servo motor (SG90 o similar)
- Potenciómetro de 10 kΩ
- 2 botones pulsadores
- 1 LED indicador
- 2 resistencias de 10 kΩ (pull-down si no usas INPUT_PULLUP)
- 1 resistencia de 220 Ω para el LED
- Protoboard
- Cables Dupont
Esquema de conexión
Potenciómetro → Pin A0 (terminal central)
Servo → Pin 9 (señal), 5V y GND
Botón guardar → Pin 2 (con INPUT_PULLUP)
Botón automático → Pin 3 (con INPUT_PULLUP)
LED indicador → Pin 4 + resistencia 220 Ω → GND
Código Arduino
#include <Servo.h>
#include <EEPROM.h>
Servo servo;
int potPin = A0;
int botonGuardar = 2;
int botonAuto = 3;
int ledIndicador = 4;
int posiciones[5];
int totalGuardadas = 0;
void setup() {
servo.attach(9);
pinMode(botonGuardar, INPUT_PULLUP);
pinMode(botonAuto, INPUT_PULLUP);
pinMode(ledIndicador, OUTPUT);
// Leer posiciones guardadas en EEPROM
totalGuardadas = EEPROM.read(0);
if (totalGuardadas > 5) totalGuardadas = 5;
for (int i = 0; i < totalGuardadas; i++) {
posiciones[i] = EEPROM.read(i + 1);
}
}
void loop() {
// Modo manual: potenciómetro controla el servo
int potValue = analogRead(potPin);
int angulo = map(potValue, 0, 1023, 0, 180);
servo.write(angulo);
// Guardar posición (botón guardar pulsado)
if (digitalRead(botonGuardar) == LOW && totalGuardadas < 5) {
posiciones[totalGuardadas] = angulo;
EEPROM.write(totalGuardadas + 1, angulo);
totalGuardadas++;
EEPROM.write(0, totalGuardadas);
// Indicar guardado con el LED
digitalWrite(ledIndicador, HIGH);
delay(200);
digitalWrite(ledIndicador, LOW);
delay(200);
}
// Reproducir posiciones (botón auto pulsado)
if (digitalRead(botonAuto) == LOW && totalGuardadas > 0) {
// Mientras el botón siga pulsado, repetir el ciclo
while (digitalRead(botonAuto) == LOW) {
for (int i = 0; i < totalGuardadas; i++) {
servo.write(posiciones[i]);
delay(500);
}
}
}
}
Paso a paso
1. Conecta el potenciómetro
Conecta los extremos del potenciómetro a 5V y GND, y la patilla central al pin A0 del Arduino. Girándolo, cambiarás el ángulo del servo en modo manual.
2. Conecta el servo
Cable de señal al pin 9, rojo a 5V y negro/marrón a GND. Asegúrate de no alimentar servos grandes directamente desde el 5V del Arduino.
3. Conecta los botones y el LED
Botón de guardar al pin 2 y botón de automático al pin 3, ambos configurados con INPUT_PULLUP. El LED indicador al pin 4 con una resistencia de 220 Ω hacia GND.
4. Carga el código
Abre el IDE de Arduino, selecciona tu placa y puerto, pega el código y súbelo.
5. Prueba el modo memoria
Mueve el potenciómetro a una posición y pulsa el botón de guardar. Repite hasta tener varias posiciones. Luego pulsa el botón automático y verás cómo el servo recorre todas las posiciones guardadas en secuencia.